package desmontec.documentos

import desmontec.documentos.DPG;
import desmontec.documentos.MapaEstocagem;
import grails.test.*

class MapaEstocagemFunctionalTest extends functionaltestplugin.FunctionalTestCase {
    protected void setUp() {
		super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }
	
	void testCriarEngenheiro(){
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			
			click "logar"
		}
		
		// passo apenas para logar no sistema
		assertStatus 200
		
		get("/engenheiro/create")
		
		form () {
			nome = "Engenheiro"
			numeroCREA = "1234"
			click "create"
		}
		
		// passo apenas para criar um engenheiro no sistema
		assertStatus 200
	}
	
	void testCriarDPGSucesso(){
		// logar no sistema		
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		get("/DPG/criarDPG")
		form () {
			numero = "1234"
			beneficiario = "DPG 1"
			selects['responsavel.id'].select "1" 
			click "create"
		}
		
		assertStatus 200 	
		assertContentContains "DPG 1"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertContentContains "Inserir Quantidade"
		form(){
			dinamite = 10
			espoleta = 10
			estopim = 10
			cordelDet = 10
			espoletim = 10
			retardo = 10
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG criada com sucesso"
		
		Calendar dataInicio = GregorianCalendar.getInstance()
		dataInicio.set(2011, 01, 01)
		Calendar dataFim = GregorianCalendar.getInstance()
		dataFim.set(2020, 12, 01)
		
		def dpg = DPG.findAllByNumero(1234)
		for (d in dpg) {
			d.inicioDoPrazoValidade = dataInicio.getTime()
			d.fimDoPrazoValidade = dataFim.getTime()
			d.save(flush: true)
		}
		
	}
	
	void testCriarMESucesso(){
		// logar no sistema		
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		get("/mapaEstocagem/create")
		
		form() {
			selects["dpg.id"].select "1"
			numeroDoCertificado = "123456"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "Mapa de Estocagem criado com sucesso."
		
		Calendar data = GregorianCalendar.getInstance();
		data.set(2011, 07, 01);
		
		def mapa = MapaEstocagem.findAllByNumeroDoCertificado(123456)
		for (m in mapa) {
			m.competencia = data.getTime()
			m.save(flush: true)
		}
	}
	
	void testCriarMEParametrosVazios(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		get("/mapaEstocagem/create")
		
		form() {
			click "create"
		}
		
		assertStatus 200
		assertContentContains "Por favor informe o numero do Mapa de Estocagem."
		
	}
	
	void testCriarMEParametrosTipoIncorreto(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		get("/mapaEstocagem/create")
		
		form() {
			numeroDoCertificado = "aa"
			selects["dpg.id"].select "1"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "Por favor insira um numero valido para o Mapa de Estocagem."
	}
	
	void testCriarMENumeroMinimo(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		get("/mapaEstocagem/create")
		
		form() {
			numeroDoCertificado = "-7"
			selects["dpg.id"].select "1"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "O numero de certificado minimo de um Mapa de Estocagem eh 0."
	}
	
	void testCriarMECompetenciaErrada(){
		// logar no sistema
		get("login/auth")
		
		form (){
			j_username = "admin"
			j_password = "12345678"
			click "logar"
		}
		assertStatus 200
		
		get("/DPG/criarDPG")
		form () {
			numero = "234"
			beneficiario = "DPG 1"
			selects['responsavel.id'].select "1"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG 1"
		assertContentContains  "Engenheiro"
		
		// Criar a Quantidade de Materiais da DPG
		assertContentContains "Inserir Quantidade"
		form(){
			dinamite = 10
			espoleta = 10
			estopim = 10
			cordelDet = 10
			espoletim = 10
			retardo = 10
			click "create"
		}
		
		assertStatus 200
		assertContentContains "DPG criada com sucesso"
		
		Calendar dataInicio = GregorianCalendar.getInstance()
		dataInicio.set(2010, 01, 01)
		Calendar dataFim = GregorianCalendar.getInstance()
		dataFim.set(2010, 12, 01)
		
		def dpg = DPG.findAllByNumero(234)
		for (d in dpg) {
			d.inicioDoPrazoValidade = dataInicio.getTime()
			d.fimDoPrazoValidade = dataFim.getTime()
			d.save(flush: true)
		}
		
		get("/mapaEstocagem/create")
		
		form() {
			numeroDoCertificado = "53"
			selects["dpg.id"].select "2"
			click "create"
		}
		
		assertStatus 200
		assertContentContains "A competencia do Mapa de Estocagem nao esta de acordo com a validade da DPG ou ja existe um Mapa de Estocagem para essa DPG com esta Competencia."
	}
}